﻿Imports System.Data.SqlClient

Module mycode
    Sub checkevents() 'проверка поданных ДТ
        Dim tempeventtable As New DataTable("events")     'Можно было и раньше это сделать, но создаем таблицу с отслеживаемыми 
        tempeventtable.Columns.Add("eventname")          'переменными (имя и ID события), затем будем перебирать их
        tempeventtable.Columns.Add("eventID")           'для универсальности кода, и легкой правки "детских" болячек
        tempeventtable.Columns.Add("stringcon")
        tempeventtable.Rows.Add("ДТ отправлена", 0, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.MessageType='CMN.11044') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "') OR (EDMsgs.MessageType='CMN.11023') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "') OR (EDMsgs.MessageType='CMN.11024') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "')")
        tempeventtable.Rows.Add("Присвоен номер", 1, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.DocumentName='NotifGTDRegistration') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "')")
        tempeventtable.Rows.Add("Начата проверка", 2, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.DocumentName='NotifGTDExaminationStart') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "')")
        tempeventtable.Rows.Add("Доп.проверка по стране", 4, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE ((EDMsgs.MessageType='CMN.11067') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "')) OR ((EDMsgs.MessageType='CMN.11071') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "'))")
        tempeventtable.Rows.Add("Увед. о досмотре", 5, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.MessageType='CMN.11005') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "')")
        tempeventtable.Rows.Add("Доп.проверка по стоимости", 3, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.MessageType='CMN.11065') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "')")
        tempeventtable.Rows.Add("Акт досмотра", 6, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.MessageType='CMN.11007') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "')")
        tempeventtable.Rows.Add("Проверка окончена", 7, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.DocumentName='NotifGTDExaminationFinish') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "')")
        tempeventtable.Rows.Add("Выпуск товаров", 8, "SELECT EDMsgs.DocGuid, EDMsgs.CustomsCode, EDMsgs.MessageType, EDMsgs.NameDS, EDMsgs.EnvelopeID FROM GTD.dbo.EDMsgs EDMsgs WHERE (EDMsgs.MessageType='CMN.11010') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "') OR (EDMsgs.MessageType='CMN.11033') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "') OR (EDMsgs.MessageType='CMN.11043') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "') OR (EDMsgs.MessageType='CMN.11033') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "') OR (EDMsgs.MessageType='CMN.11101') AND (EDMsgs.InOutDateTime>='" & Now.AddHours(My.Settings.timerday) & "') ")


        For e = 0 To tempeventtable.Rows.Count - 1
            Dim myevent = tempeventtable.Rows(e).Item("eventname")
            Dim eventID = Integer.Parse(tempeventtable.Rows(e).Item("eventID")) 'номер события, начиная с 0
            Dim stringcon = tempeventtable.Rows(e).Item("stringcon")
            start.sysmessage("Проверка событий """ & myevent & """...", "", False, True)



            'проверяем используется ли это событие в рассылках
            If needevent(myevent) = False Then
                start.sysmessage("Событие " & myevent & " не используется в рассылках", "", False, True)
                Continue For
            End If

            Dim con As New SqlConnection(getSQLsc())
            Dim temptable As New DataSet() ' создаём временную таблицу для хранения всего и вся :)

            Try ' получаем таблицу ID всех ДТ по событию
                Dim sqlconn As SqlDataAdapter = New SqlDataAdapter(stringcon, con)
                sqlconn.Fill(temptable, "listDT") 'записали в таблицу с SQL\
                start.sysmessage(" Найдено строк: " & temptable.Tables("listDT").Rows.Count, "", False, True)
                For i = 0 To temptable.Tables("listDT").Rows.Count - 1 'проверяем каждую отправленную ДТ
                    Dim komment2 As String = Nothing
                    Dim regDTnum As String = Nothing
                    Try
                        Dim tamins As String = temptable.Tables("listDT").Rows(i).Item("NameDS") 'получаем оба комментария. + вн.номер
                        Dim docsinfo = komment(temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString)
                        Dim komment1 = docsinfo.Item(0)
                        komment2 = docsinfo.Item(1)
                        Dim intDTnum = docsinfo.Item(2)
                        If Len(docsinfo.Item(3)) > 0 Then regDTnum = docsinfo.Item(3) Else regDTnum = intDTnum
                        If newevent(komment2, eventID) = False Then Continue For 'если по этому событию отписались, то дальше не проверяем
                        If eventID = 8 AndAlso newvip(temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString) = False Then Continue For
                        If getxml(temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString, temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString & ".xml") = False Then
                            start.sysmessage("Ошибка при получении xml", "", False, True)
                            Continue For
                        End If
                        Dim DTds As DataSet = scanxml(temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString & ".xml") 'проверяет файлик  "xmltoread.xml" - получяем данные из xml файлика
                        Dim listdelivery As ArrayList = getdelivery(myevent, temptable.Tables("listDT").Rows(i).Item("CustomsCode"), DTds.Tables("Общее").Rows(0).Item("Отправитель"), DTds.Tables("Общее").Rows(0).Item("Получатель"), komment1)
                        For j = 0 To listdelivery.Count - 1
                            Dim mails = formatmail(DTds, regDTnum, listdelivery.Item(j), eventID, myevent, komment1, tamins, temptable.Tables("listDT").Rows(i).Item("EnvelopeID").ToString, temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString)
                            start.sysmessage("Пытаюсь отправить письмо " & temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString, "", False, True)
                            If start.Send_Mail(mails.Item(2), mails.Item(0), mails.Item(1), mails.Item(3), mails.Item(4), mails.Item(5)) Then
                                start.sysmessage(myevent & " " & regDTnum, "Cообщение отправлено успешно", True)
                                If j = listdelivery.Count - 1 Then checkevent(temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString, komment2, eventID)
                            End If
                        Next
                    Catch ex As Exception
                        start.sysmessage("Ошибка при уведомлении отправленной ДТ " & temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString, ex.Message, False, True)
                        start.sysmessage("Ошибка при уведомлении отправленной ДТ " & temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString, "", True)
                        newerror(temptable.Tables("listDT").Rows(i).Item("DocGuid").ToString, komment2, regDTnum, ex.Message) 'отмечаем ошибочку
                        Continue For
                    End Try
                Next i
            Catch ex As Exception
                start.sysmessage("Вероятно ошибка соединения...", ex.Message, False, True)
            Finally

            End Try
            start.sysmessage("Проверка события """ & myevent & """ закончена", "", False, True)
            'cleartempfolder()
        Next e
    End Sub
End Module
